Вы - -й посетитель этой странички
Создание экспертной системы средствами Access
А.Б. Ливчак, А.Г. Гейн
Предлагаемая вашему вниманию статья, с одной стороны, является продолжением ранее опубликованного материала "Кухня СУБД Access" (Информатика № 27/2000), хотя обязательного знакомства читателя с этим материалом не предполагается, с другой стороны и прежде всего, призвана продемонстрировать возможность для учащихся не по рассказу, а через собственную деятельность осваивать основные принципы построения и работы экспертных систем. Мы убеждены, что изучение школьниками любого материала (и экспертные системы не исключение) лишь на уровне теоретического изложения не дает полноценного знания и понимания сути изучаемого. В школьных учебниках практика создания экспертной системы, и в том числе ее ядра - базы знаний, опирается на изучение языка программирования Пролог (см. [1], [2], [3]). Но оказывается, что создание экспертной системы вполне доступно средствами СУБД Access, без специального изучения языков логического программирования. Дополнительные методические преимущества такого подхода состоят в том, что, во-первых, учащиеся обычно осваивают эту СУБД в рамках изучения информационных технологий, так что они во многом подготовлены к предстоящей работе технологически. Во-вторых, использование Access делает процесс создания экспертной системы и ее работу визуализированной, чего трудно достигнуть при использовании Пролога и других подобных языков.
Разумеется, создаваемая нами экспертная система - это весьма простая модель настоящих экспертных систем. Тем не менее, как всякая модель, она отражает основные принципы экспертных систем. Кроме того, мы можем точно сказать, что те базы знаний, построение которых рассматривается в учебниках [1], [2], [3], реализуемы посредством Access.
Предлагаемый вашему вниманию материал, по существу, является частью готовящегося к изданию учебного пособия по информатике и информационным технологиям. Поэтому он изложен так, как если бы его читателями были учащиеся старших классов. Но мы убеждены, что и учителю он будет интересен; более того, его вполне можно использовать для организации уроков по теме "Экспертные системы" в дополнение к тому материалу, который имеется в вышеназванных учебниках.
Другая особенность данного материала состоит в том, что, будучи фрагментом учебника и на самом деле далеко не первой его главой, он содержит ссылки на те или иные ранее изученные понятия. Для удобства читателя в таких случаях мы кратко даем необходимое разъяснение используемых понятий; обычно это делается в сноске, сопровождающей основной текст. Кроме того, в сносках приведены некоторые комментарии для учителя, которые в дальнейшем войдут в сопровождающую данный учебник книгу методических рекомендаций.
§ 1. Базы знаний и экспертные системы
Приходилось ли вам советоваться, прежде чем принять то или иное решение? Наверняка да, и скорее всего не однажды. Все мы постоянно советуемся с друзьями и родственниками по самым разным вопросам.
Но есть, так сказать, и профессиональные советчики, к которым мы обращаемся, потому что они являются специалистами по интересующему нас вопросу. Если человек заболел, он обращается к врачу, чтобы тот посоветовал ему, какие лекарства принимать и какие процедуры делать. Если возникают правовые проблемы, идут к юристу. Если возникли проблемы в семье, то обращаются к психологу, специализирующемуся именно на проблемах семейных отношений. И так далее.
Таких людей мы будем называть консультантами, или экспертами.
Но верно ли, что экспертное заключение может дать только человек в личном общении? Конечно, нет. Существуют справочники и энциклопедии по различным областям знаний, в которых тоже содержатся советы по многим волнующим человека вопросам. Более того, вряд ли всегда можно найти такого же много знающего человека, как, например, какая-нибудь энциклопедия или хорошее руководство. Отличие состоит в том, что эксперту вы задали свой вопрос, или, наоборот, он вам задал какие-то вопросы, после чего он подумал-подумал и дал совет. А справочник на помощь не придет - сам ищи, где нужный для тебя совет. Совместить, казалось бы, трудносовместимое - энциклопедичность знаний и активную реакцию на потребность пользователя - позволяет компьютер, точнее, одна из разновидностей систем искусственного интеллекта - так называемые экспертные системы.
В мире современных информационных технологий экспертные системы находят все большее применение. Конструкторам они помогают подобрать материалы, из которых будут изготавливаться те или иные изделия, - ведь здесь надо учесть такие факторы, как прочность, легкость, сочетаемость с другими материалами, простота обработки. Ни один материал не обладает всеми этими свойствами одновременно. Выбрать оптимальный вариант помогают материаловедческие экспертные системы.
Экспертные системы другого вида позволят быстро оценить и вскрыть слабые места в организации выполнения больших проектов. Такие системы включают в себя, в частности, возможность анализа так называемых "сетевых графиков".
Экспертные системы третьего вида помогают специалисту, например врачу, осуществлять диагностику. Впрочем, "лечить" ведь бывает надо не только людей или животных, но сложные технические системы.
Эксперту, чтобы дать обоснованный совет, нужны знания. Поэтому каждая экспертная система содержит в качестве ядра базу знаний той предметной области, для работы в которой она предназначается. Вы уже знакомы с понятием базы данных1 . Теперь же речь идет о базах знаний. И уже из сопоставления названий каждый, наверное, ощущает, что в этих понятиях должно быть что-то родственное. Чтобы в этом разобраться, отметим, что знания - это информация, хранимая в некотором обобщенном виде и готовая к применению в схожих ситуациях. Это значит, что такая информация представлена той или иной информационной моделью. Так что все знания, накопленные человечеством, представляют собой совокупность взаимосвязанных и не противоречащих друг другу информационных моделей. Можно сказать, что данные - это всегда информация о конкретных объектах, в то время как знания, как правило, выражают общие зависимости между разными признаками объектов. Конечно, данные тоже представляют собой некоторое знание, но это его весьма частный случай.
Итак, основу базы знаний составляют описания моделей, выполненные посредством некоторого формального языка, понятного компьютеру. Между этими моделями устанавливаются логические связи, превращающие совокупность моделей, содержащихся в базе знаний, в систему. Как и база данных, каждая база знаний оснащена системой управления (сокращенно СУБЗ), которая позволяет заполнять и изменять базу знаний (как говорят, редактировать базу), а также отвечать на запросы, направляемые базе знаний.
Другим компонентом экспертной системы является блок, называемый обычно "решатель". Он моделирует ход рассуждений эксперта на основании знаний, имеющихся в базе знаний. По-другому решатель называют блоком логического вывода2.
Еще одним компонентом экспертной системы является блок, позволяющий пользователю получить ответы на вопросы "Как была получена данная рекомендация?" и "Почему экспертная система приняла такое решение?". Отвечая на вопрос "Как:", экспертная система предъявляет пользователю шаг за шагом весь процесс получения решения с указанием использованных фрагментов базы знаний. При ответе на вопрос "Почему:" система демонстрирует последнее приме нение правила вывода, иными словами, последний шаг в процессе принятия решения.
Наконец, для каждой экспертной системы предусмотрен интерфейс, позволяющий пользователю на некотором языке записывать свой запрос к системе, а самой системе давать ответ на этот запрос.
Существуют специальные готовые оболочки экспертных систем, которые позволяют посредством редактора базы знаний заполнить ядро экспертной системы и превратить схемы правил вывода в конкретные такие правила. Занимается этим специалист, которого обычно называют "инженером по знаниям", или "когнитологом". Можно сказать, что он выступает промежуточным звеном между живыми экспертами и создаваемой базой знаний.
§ 2. Реляционная модель экспертной системы
Обычный режим работы любой экспертной системы - диалог с пользователем. На приглашение экспертной системы пользователь сообщает в той или иной форме общую постановку задачи, т.е. что он хочет получить в качестве результата. В ответ экспертная система попросит его ввести какие-то исходные сведения об объектах, фигурирующих в задаче. Если "по размышлению" она придет к выводу, что для ответа этих данных недостаточно, то задаст соответствующий вопрос пользователю. Получив ответ, она снова поразмышляет и так шаг за шагом будет продвигаться к нужному ответу. Конечно, в какой-то момент может оказаться так, что у пользователя нет ответа на вопрос системы. Тогда он вправе попросить предъявить уже достигнутый уровень решения и, более того, весь ход рассуждений, приведший к создавшемуся положению. Впрочем, как было отмечено в предыдущем параграфе, пользователь и в случае полного решения задачи может получить исчерпывающую информацию о том, как этот ответ был получен. В этом смысле экспертная система может выступать как средство обучения, демонстрируя пользователю то, как нужно рассуждать, чтобы принять требуемое решение.
Экспертных систем на сегодняшний день создано много. В их основу положены разные принципы организации баз данных и правил вывода. Существуют специальные языки программирования, предназначенные для разработки систем искусственного интеллекта и, в частности, экспертных систем. Одним из таких языков является Пролог. Мы, однако, не имеем в виду сейчас, отложив все дела, заняться изучением Пролога.
Тем не менее, чтобы рассказ об экспертных системах не остался сказкой о какой-то таинственной сущности, которую никак нельзя "потрогать" руками обыкновенному школьнику, мы предлагаем создать небольшую и очень простенькую экспертную систему. Она, конечно, не будет хватать звезд с неба, но зато вы увидите реализацию многих принципиальных подходов, используемых в настоящих больших экспертных системах.
Итак, начнем строить модель экспертной системы.
Прежде всего объявим, что мы будем строить эту модель на основе реляционного подхода3 . А кроме того, в вашем распоряжении имеется компьютерная технология реализации реляционного подхода - это Aсcess.
В § 1 мы говорили, что разным классам задач соответствуют разные типы экспертных систем. Систему, которую намерены построить мы, относится к классу идентификационных (или диагностических) систем. Системы этого класса решают задачу определения, т.е. идентификации, объекта по его признакам. Такие системы составляют значительную часть существующих экспертных систем, и без их рассмотрения не обходится ни один учебник по экспертным системам4 . А в качестве примера, как правило, рассматривается задача определения вида животного или растения. Вот и мы будем проектировать такую ботаническую экспертную систему. Кроме того, мы для простоты ограничиваемся лишь рассмотрением детерминированных систем, когда пользователь может точно ответить на вопрос о наличии или отсутствии того или иного признака.
Начнем с того, что сформулируем знания по указанному вопросу. Вот эти формулировки.
Если класс голосемянные и форма листа чешуеобразная, то семейство - кипарисовые.
Если класс голосемянные и форма листа иглоподобная и конфигурация хаотическая, то семейство -сосновые.
Если класс голосемянные и форма листа иглоподобная и конфигурация - 2 ровных ряда и серебристая полоса, то семейство - сосновые.
Если класс голосемянные и форма листа иглоподобная и конфигурация - 2 ровных ряда и серебристой полосы нет, то семейство - болотный кипарис.
Если тип - деревья и форма листа широкая и плоская, то класс - покрытосемянные.
Если тип - деревья и неверно, что форма листа широкая и плоская, то класс - голосемянные.
Если стебель зеленый, то тип - травянистые.
Если стебель древесный и положение стелящееся, то тип - лианы.
Если стебель древесный и положение прямостоящее и один основной ствол, то тип - деревья.
Если стебель древесный и неверно, что положение прямостоящее и один основной ствол, то тип -кустарниковые.
Мы, конечно, специально выбрали систему, в которой потребуется не так уж много знаний. Впрочем, попробуйте, глядя только в выписанные формулировки, ответить на вопрос, какому семейству принадлежит растение, если в руках вы держите один лист, имеющий форму иголки. Скорее всего за полминуты это не получится.
Мы будем реализовывать следующий план построения экспертной системы. Сначала строится простейший вариант, который будет демонстрировать только основную идею. По сути дела, это решатель. Затем мы добавим остальное - блок объяснения и т.п., что позволит демонстрировать работу экспертной системы в полном объеме.
Систему логического вывода (тот самый решатель) мы изобразим орграфом5 . Каждая вершина графа помечена уточняющим вопросом экспертной системы к пользователю или ее ответом на задачу. Для удобства все вершины перенумерованы, начиная с нуля.
Если вершина помечена вопросом экспертной системы, то из нее выходят две дуги. Одна дуга помечена одним ответом пользователя, другая - его альтернативным ответом. Вершина, соответствующая ответу экспертной системы на задачу, не имеет выходящих дуг. На рис. 1 представлен граф, отражающий знания экспертной системы. Будем в дальнейшем вершину орграфа называть "состоянием экспертной системы".
По существу, работа экспертной системы означает "путешествие" по этому орграфу. Такое путешествие состоит из последовательности однотипных шагов, на каждом из которых пользователь должен решить, по какой дуге он пойдет из очередной вершины.
Исповедуя реляционный подход, мы должны теперь описать этот орграф подходящими таблицами. Сделать это нетрудно: каждую дугу мы опишем номером ее начала и номером ее конца. Кроме того, поскольку дуги у орграфа помечены, мы сделаем в таблице не два столбца - начальная и конечная вершины дуги, - а три, добавив столбец "Ответ пользователя". Назовем эту таблицу "Ребра".
Но одной этой таблицы мало, поскольку требуется еще информация о реакциях экспертной системы на ответы пользователя. Реакция же может быть двоякой: ответ системы или очередной вопрос пользователю. Поэтому и таблиц будет две. Вот как могут выглядеть эти таблицы.
Таблица "Имена" имеет два атрибута: Состояние и Имя.
Таблица "Вопросы" также имеет два атрибута: Состояние и Вопрос.
Теперь надо определить взаимодействие этих таблиц. Для этого нам в каждый момент работы экспертной системы потребуется знать, в каком состоянии она находится. Номер этого состояния будем хранить еще в одной таблице, которую назовем "Текущее".
Сейчас в эту таблицу записано начальное состояние экспертной системы.
Ясно, что должно происходить дальше. По текущему состоянию экспертная система генерирует запрос к таблице "Ребра". При этом должно быть реализовано соединение таблиц "Текущее" и "Ребра" по атрибутам Начало = Состояние. В зависимости от реакции на этот запрос пользователя экспертная система переходит в следующее состояние и либо выдает ответ, либо генерирует очередной запрос. Изменение состояния экспертной системы организуется с помощью макрокоманд, допустимых той программной оболочкой, которая используется для реализации этой модели экспертной системы.
§ 3. Создаем свою экспертную систему (простейший вариант)
Прежде всего надо создать те таблицы, которые описаны в тексте § 2. Создали? Если да, то идем дальше. Создаем запрос ВАРИАНТЫ, который позволяет выбрать те дуги, по которым пользователь может двигаться из текущего состояния.
Теперь нужно предложить пользователю выбрать одну из этих дуг и пометить КОНЕЦ выбранной дуги в таблице "Текущее". Все это мы реализуем с помощью формы с полем со списком. Эта форма будет иметь единственное поле, в котором и будет выпадать список дуг, доступных в данном состоянии. Эту форму назовем ВАРИАНТЫ.
Чтобы построить указанную форму, надо вызвать конструктор форм:
После щелчка по "Оk" появляются конструктор форм и панель элементов. Вот как выглядят конструктор форм, панель инструментов и инструмент "Поле со списком":
Расширим область данных, потянув ее мышью за границы. Выберем инструмент "Поле со списком" и нарисуем им поле. После этого система предлагает диалог, от которого мы откажемся, нажав кнопку "Отмена".
Щелчком мыши внутри поля выделим его. Нарисовав поле со списком, вызываем его свойства.
С помощью команды "Свойства" меню "Вид" присвоим свойствам следующие значения: Данные -СОСТОЯНИЕ, Источник строк - ВАРИАНТЫ, Число столбцов - 2, Ширина столбцов - 1,9 cм.
Теперь нужно заготовить макрос, который будет эту форму открывать и закрывать. Он должен выполняться при выборе значения в поле подстановок (иначе это значение не будет заноситься в таблицу "Текущее").
Выглядит он так:
Построенный макрос нужно привязать к обновлению поля со списком формы ВАРИАНТЫ. Для этого нужно снова выделить в режиме конструктора поле со списком, открыть его свойства и приписать событию "После обновления" значение "Макрос1".
Теперь после обновления поля будет выполняться Макрос1.
Все, простейший вариант экспертной системы готов. Можно перейти в режим формы и поэкспериментировать с ним.
§ 4. Совершенствуем экспертную систему
В простейшем варианте молчаливо предполагалось, что поиск происходит "с нуля", когда пользователь ничего не знает о классификации объекта. Но ведь на практике вполне возможно, что уже известен, скажем, класс объекта. Зачем же тогда начинать с нуля?
Вспомним, что, кроме таблицы "Ребра", у нас есть еще "Имена" и "Вопросы".
Начнем с таблицы "Имена". В ней содержатся пол ные имена состояний. Ее мы будем использовать для того, чтобы разрешить пользователю входить в систему "с середины", когда он уже частично классифицировал свой объект.
Дальше идея очень проста. Мы предложим пользователю список всех имен состояний и по его ответу поместим в таблицу "Текущее" номер соответствующего состояния. (Если пользователь ничего не знает о классификации своего объекта, то мы поместим туда 0.) После этого мы включим наш эскизный вариант.
Дело за реализацией идеи. Создадим форму НАЧАЛО с источником записей "Текущее". В ней расположим поле со списком СОСТОЯНИЕ с такими свойствами:
Создадим Макрос2, который закрывает форму НАЧАЛО и открывает форму ВАРИАНТЫ.
Добавим в свойства поля формы НАЧАЛО запуск Макроса2 после обновления.
Итак, работа нашей экспертной системы начинается с открытия формы НАЧАЛО. После того как пользователь укажет, что ему известно о классификации исследуемого объекта, запускается форма ВАРИАНТЫ.
Но и это еще не все.
§ 5. Блок объяснений
Непременным элементом экспертной системы считается блок объяснений. Он должен разъяснять пользователю, почему экспертная система поступает так, а не иначе. Мы предлагаем реализовать его с помощью одной или нескольких кнопок, которые пользователь будет нажимать в зависимости от того, что именно ему непонятно. В ответ система будет разъяснять ему соответствующий аспект текущего состояния.
Давайте начнем с кнопки "Расшифровка вопроса", которую пользователь будет нажимать, если ему непонятен вопрос. В ответ ему будет выдаваться развернутая формулировка вопроса, который система задает в текущем состоянии. Вы, вероятно, догадались, что все эти развернутые формулировки будут храниться в одной таблице. За основу можно взять таблицу "Вопросы". У нее, правда, есть один недостаток - там нет никакой информации для терминальных состояний, когда уже у системы нет вопросов, поскольку она знает ответ. Ну что же, это - дело поправимое. В этих состояниях система будет сообщать пользователю, какой получен ответ. В итоге таблица будет выглядеть так:
Теперь сконструируем запрос, выбирающий из таблицы "Вопросы" строку, относящуюся к текущему состоянию.
Теперь создадим для него форму ВОПРОС с одним полем.
Сконструируем Макрос3, открывающий форму ВОПРОС.
Теперь остается на форме ВАРИАНТЫ с помощью инструмента "Кнопка" панели элементов нарисовать кнопку и указать в ее свойствах, что нажатие на нее вызывает выполнение Макроса3.
Аналогично можно создать еще несколько кнопок, с помощью которых пользователь сможет получать разъяснение по тем или иным аспектам текущего состояния. Например, некоторые авторы считают, что пользователю нужно объяснять, что произойдет, если он выберет тот или иной вариант ответа. Это легко сделать с помощью таблицы "Объяснения". Вот как она выглядит для нашего примера.
Дальше нужно поступать в точности так же, как и в предыдущем случае. Нужно сделать запрос, выделяющий из таблицы "Объяснения" то объяснение, которое соответствует текущему состоянию, форму, связанную с этим запросом, макрос, открывающий эту форму, и кнопку на форме ВАРИАНТЫ, запускающую этот макрос 6 .
Итак, как же будет работать наша система? Чтобы запустить ее, нужно открыть форму НАЧАЛО, раскрыть поле со списком и выбрать один из предлагаемых вариантов (см. рис. 18). В данном случае выбран нулевой вариант, когда пользователь ничего не знает о классификации интересующего его объекта.
После этого открывается форма ВАРИАНТЫ. Пользователь ведет диалог с системой, каждый раз открывая поле со списком и выбирая один из предлагаемых ему в данном состоянии вариантов. Если ему что-то непонятно, он нажимает соответствующую кнопку блока объяснения (см. рис. 19).
Нажатие одной из кнопок блока объяснения (1) раскрывает соответствующую форму с разъяснениями (2), соответствующими текущему состоянию (рис. 20). Чтобы закрыть ее, нужно щелкнуть по крестику в левом верхнем углу формы (3).
Литература
1. Бешенков С.А., Гейн А.Г., Григорьев С.Г. Информатика и информационные технологии. Свердловск: УрГПУ, 1995, 144 с.
2. Информатика. Базовый курс для 7-9-х классов / Под ред. Е.К. Хеннера. М.: Лаборатория базовых знаний, 2000, 384 с.
3. Информатика. Задачник-практикум в 2 т. / Под ред. И.Г. Семакина, Е.К. Хеннера: Т. 1. М.: Лаборатория базовых знаний, 1999, 304 с.
4. Томпсон Б., Томпсон У. Анатомия экспертных систем. //Реальность и прогнозы искусственного интеллекта М.: Мир, 1987.